package com.bestcem.xm.label.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.label.entity.pojo.LabelDO;
import com.bestcem.xm.label.grpc.service.param.label.*;
import com.bestcem.xm.label.service.dto.label.LabelDTO;
import com.bestcem.xm.label.service.dto.label.LabelInfoDTO;

import java.util.List;

/**
 * 标签服务
 *
 * @author yf.wang <yf.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/5/21
 */
public interface LabelService {

    /**
     * 分页获取标签列表
     *
     * @param param
     * @return
     */
    ServiceResult<List<LabelDTO>> listGroupLabels(ListGroupLabelsParam param);

    /**
     * 根据 标签id 获取标签的相关信息
     *
     * @param labelIds
     * @return
     */
    ServiceResult<List<LabelDTO>> getLabelInfo(List<String> labelIds);

    /**
     * 创建标签
     *
     * @param createLabelParam
     * @return
     */
    ServiceResult<String> createLabel(CreateLabelParam createLabelParam);

    /**
     * 更新标签
     *
     * @param param
     * @return
     */
    ServiceResult<String> updateLabel(UpdateLabelParam param);

    /**
     * 删除标签
     *
     * @param param
     * @return
     */
    ServiceResult<String> deleteLabel(DeleteLabelParam param);

    /**
     * 删除所有属于该标签组的标签
     *
     * @param labelGroupId 标签组ID not null
     * @return 删除的标签 not null
     */
    ServiceResult<List<LabelDTO>> deleteByLabelGroupId(String labelGroupId);

    /**
     * 获取所有的标签信息
     *
     * @param param
     * @return
     */
    ServiceResult<List<LabelInfoDTO>> listLabels(ListLabelsParam param);

    /**
     * 检查标签名称是否重复
     *
     * @param param
     * @return
     */
    ServiceResult<Boolean> checkLabelName(CheckLabelNameParam param);

    /**
     * 获取该组织下所有的标签
     *
     * @param orgId
     * @return
     */
    List<LabelDO> findByAttributeAndOrgId(String orgId);
}
